package jianzhiOffer;

/**
 * @author : xwj
 * @date : 2021/9/30 15:42
 * @description : 定义一个函数，输入一个链表的头节点，反转该链表并输出反转后链表的头节点。
 * @class : test04
 **/

public class test04 {

    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int val) { this.val = val; }
    }

    //1. 0 ms	37.9 MB
    /*
    * 创建一个头结点用来返回，
    * 顺序遍历head，每遍历一个节点，就用头插法插入到待返回节点中。
    * */
    public static ListNode reverseList(ListNode head) {
        ListNode r = new ListNode(0);
        while (head != null) {
            ListNode t = head;
            head = head.next;
            t.next = r.next;
            r.next = t;
        }
        return r.next;
    }

    public static void main(String[] args) {
        ListNode tail = new ListNode(2);
        ListNode tmp = new ListNode(3);
        ListNode head = new ListNode(1);
        head.next = tmp;
        tmp.next = tail;

        show(reverseList(head));
    }

    public static void show(ListNode n) {
        while (n != null) {
            System.out.println(n.val);
            n = n.next;
        }
    }

}
